package com.longtop.framework.common;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;

import com.longtop.framework.sys.config.model.TSysConfig;
import com.longtop.framework.sys.org.model.TSysOrg;
import com.longtop.framework.util.StringUtil;

/**
 * @目的：统一调度系统缓存，为业务模块提供接口
 * @说明：统一管理BaseDataManage.java中的缓存
 * 
 * @author 胡砥峰
 * 
 */
public class CacheUtil {

	/**
	 * 取得 代码信息 list
	 * 
	 * @param codeTypeId
	 *            代码类别id
	 * @return
	 */
	public static List getCodeInfoListByCodeTypeId(String codeTypeId) {

		Object obj = BaseDataManage.getCodeInfoMap().get(codeTypeId);
		return obj != null ? (List) obj : new ArrayList();
	}

	/**
	 * 取得 菜单操作权限 list
	 * 
	 * @param roleId
	 * @return
	 */
	public static List getAuthOperMenuByRoleId(String roleId) {
		return BaseDataManage.getAuthOperMenu(roleId);
	}

	/**
	 * 取得 功能操作权限 list
	 * 
	 * @param roleId
	 * @return
	 */
	public static List getAuthOperFuncByRoleId(String roleId) {
		return BaseDataManage.getAuthOperFunc(roleId);
	}

	/**
	 * 根据org_id取得当前机构及其子机构的id
	 * 
	 * 格式（orgId='111' or orgId ='222' or...or orgId = 'nnn'）
	 * 
	 * 20110530 胡砥峰 修改 机构mapping_code
	 * 
	 * @param orgId
	 * @param tableNameAliasName
	 * @param orgFieldName
	 * @return
	 */
	public static String getAllOrgIds(String orgId, String tableNameAliasName, String orgFieldName) {

		StringBuffer sb = new StringBuffer();
		sb.append("( ");

		if (!StringUtil.isStrEmpty(tableNameAliasName)) {
			sb.append(tableNameAliasName).append(".");
		}

		TSysOrg tSysOrg = CacheUtil.getSysOrgByOrgId(orgId);

		// 总行部门只有2级； 支行和网点分别为 2级，3级
		// 在东莞农商行，级次=3 or 机构号以00开头 表示最低级机构； 不等于3，表示有下级机构, 用机构级次码关联

		if ( tSysOrg.getOrgLevel() == 3 || (tSysOrg.getOrgLevel() == 2 && tSysOrg.getOrgId().startsWith("00")) )
			sb.append(orgFieldName).append("='").append(orgId).append("'");
		else
			sb.append("ORG_LEVEL_CODE").append(" like '").append(tSysOrg.getOrgLevelCode()).append("%'");

		// sb.append(orgFieldName).append("='").append(orgId).append("'");
		//		
		// List list = BaseDataManage.getAllSubOrg(orgId);
		// if (list != null && list.size() > 0) {
		// for (Iterator iterator = list.iterator(); iterator.hasNext();) {
		// String id = (String) iterator.next();
		//
		// if (!StringUtil.isStrEmpty(id))
		// sb.append("OR ");
		//
		// if (!StringUtil.isStrEmpty(tableNameAliasName)) {
		// sb.append(tableNameAliasName).append(".");
		// }
		//
		// sb.append(orgFieldName).append("='").append(id).append("'");
		// }
		// }

		return sb.append(")").toString();
	}

	/**
	 * 通过组织机构id 得到 SysOrg 对象
	 * 
	 * @param orgId
	 * @return
	 */
	public static TSysOrg getSysOrgByOrgId(String orgId) {
		return (TSysOrg) BaseDataManage.getOrgMap().get(orgId);
	}

	/**
	 * @目的：根据 id 取得 参数的值
	 * @param configId
	 * @return
	 */
	public static String getConfigValueById(String configId) {
		Object obj = BaseDataManage.getConfigMap().get(configId);
		if (obj == null) {
			return null;
		}
		return StringUtils.trimToEmpty(((TSysConfig) obj).getConfigValue());
	}
}
